#ifndef _SYCSERVICE_T_H
#define _SYCSERVICE_T_H

#include <hyper_t.h>

/* 系统调用主号 */

#define SYC_MAJ_MM    1   /* 内存操作 */
#define SYC_MAJ_FS    2   /* 文件操作 */
#define SYC_MAJ_TD    3   /* 线程操作 */
#define SYC_MAJ_TM    4   /* 时间操作 */

/* 系统调用次号 */

#define SYC_MIN_MM_ALLOC  1
#define SYC_MIN_MM_FREE   2

/* 系统调用号 */

//#define SNR_MM_ALLOC       ((1 << SYC_MAJ_MM) | SYC_MIN_MM_ALLOC)

enum SYC_SERVICE_NBR
    {
    
    /* 内存操作 */

    SNR_MM_ALLOC = 1,  /* 分配 */
    SNR_MM_FREE  = 2,  /* 释放 */

    /* 进程操作 */

    SNR_TD_EXEL  = 3,  /* 执行 */
    SNR_TD_EXIT  = 4,  /* 退出 */
    SNR_TD_GID   = 5,  /* 获取ID */
    SNR_TD_GSTUS = 6,  /* 获得状态 */
    SNR_TD_SSTUS = 7,  /* 设置状态 */

    /* 文件操作 */

    SNR_FS_OPEN  = 8,  /* 打开文件 */
    SNR_FS_CLOSE = 9,  /* 关闭文件 */
    SNR_FS_READ  = 10, /* 读文件 */
    SNR_FS_WRITE = 11, /* 写文件 */
    SNR_FS_IOCTL = 12, /* IOCTL */
    SNR_FS_LSEEK = 13, /* 读写指针偏移 */

    /* 时间操作 */

    SNR_TM_GTM   = 14, /* 获得时间 */

    /* 最大值 */

    SNR_IN_MAX
    };

/*  */

typedef struct s_STKPARAM
    {
    reg_t rvs0;
    reg_t rvs1; /* r0寄存器 */
    reg_t val1; /* r1寄存器 */
    reg_t val2; /* r2寄存器 */
    reg_t val3; /* r3寄存器 */
    reg_t val4; /* r4寄存器 */
    reg_t val5; /* r5寄存器 */
    reg_t val6; /* r6寄存器 */
    reg_t val7; /* r7寄存器 */
    } stkparam_t;

/* 系统调用函数指针 */

typedef sysstus_t (*syscall_t) (uint_t sycnbr, stkparam_t * stkparam);

#endif
